enum   ITacticType
{
    defend=1,
    attack=2,
}

interface ITactic< T extends  ITacticType> 
{
    type:T
}
interface IBaseTactic< T extends  ITacticType=ITacticType> extends ITactic<T> 
{
    targets?:ObjectRef[],
}
interface IDefendTactic extends IBaseTactic<ITacticType.defend> 
{
    enemy:Id<Creep>[],
}
interface IAttackTactic extends IBaseTactic<ITacticType.attack> 
{
   targets:ObjectRef[],
   goal?:IMoveGoal
}
interface TacticMap
{
    [ITacticType.defend]:IDefendTactic
}
 